package com.yangji.rxjavatest.rx.label;


import com.yangji.rxjavatest.Log;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Consumer;

public class RxSingle {

    private static final String TAG = "MainActivity";

    // Single
    // 顾名思义，Single 只会接收一个参数，而 SingleObserver 只会调用 onError() 或者 onSuccess()。
    // merge 连接
    // distinct 归纳自动合并数组 把两个数组合并成一个数组
    //
    // reduce归纳 比如你可以进行int累加（减乘除），等等 最后变成一个值
    // scan 归纳 如同上面reduce 只不过 他的结果每次都需要输出，从第一个值开始


    public RxSingle() {

//        reduce();
        merge();
    }

    private void merge() {
        Observable.merge(Observable.just(1, 2), Observable.just(3, 4, 5))
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {
                        Log.e(TAG, "accept: merge :" + integer + "\n");
                    }
                });
    }


    public void reduce() {

        Observable.just(1, 2, 3)
                .reduce(new BiFunction<Integer, Integer, Integer>() {
                    @Override
                    public Integer apply(Integer integer, Integer integer2) throws Exception {
                        return integer + integer2;
                    }
                }).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                Log.e(TAG, "accept: reduce : " + integer + "\n");
            }
        });
    }


}
